/**
 * Created by xinxinran on 14-6-27.
 */
(function (factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory);
    } else {
        factory(window);
    }
}(
    function (global) {
        'use strict';
        var AnimationHelper = {}, lastTime = 0, vendors = ['ms', 'moz', 'webkit', 'o'];

        for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
            window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
            window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
        }
        if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {
            var currTime = new Date().getTime();
            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
            var id = window.setTimeout(function () {
                callback(currTime + timeToCall);
            }, timeToCall);
            lastTime = currTime + timeToCall;
            return id;
        };
        if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {
            clearTimeout(id);
        };

        AnimationHelper.requestAnimationFrame = window.requestAnimationFrame.bind(window);
        AnimationHelper.cancelAnimationFrame = window.cancelAnimationFrame.bind(window);

        global && (global.AnimationHelper = AnimationHelper);

        return AnimationHelper;
    }
));